package cn.itsource.org.controller;

import cn.itsource.basic.util.AjaxResult;
import cn.itsource.basic.util.PageList;
import cn.itsource.org.domain.Department;
import cn.itsource.org.query.DepartmentQuery;
import cn.itsource.org.service.IDepartmentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@Api(tags = "部门管理相关接口")
@RequestMapping("/dept")
public class DepartmentController {

    /**
     * 注入service层
     */
    @Autowired
    private IDepartmentService departmentService;

    @GetMapping("/parentDepts")
    @ApiOperation("查询所有部门的接口")
    public AjaxResult parentDepts(){

        //1.查询
        List<Department> tree = departmentService.parentDepts();
        //2.封装结果返回
        return AjaxResult.createSuccess(tree);
    }

    @GetMapping("/treeList")
    @ApiOperation("查询所有部门的接口")
    public AjaxResult treeDept(){

        //1.查询
        List<Department> tree = departmentService.treeDept();
        //2.封装结果返回
        return AjaxResult.createSuccess(tree);
    }


    @GetMapping
    @ApiOperation("查询所有部门的接口")
    public AjaxResult list(){
        /**
         * 本地写的代码直接冲上去 2222222222222222222222222
         * 我在这个公司开个一个月，做了一个根据用户的心情改变app的颜色的功能，做完了，我要提交一下
         * 我在这个公司开个一个月，做了一个根据用户的心情改变app的颜色的功能，做完了，我要提交一下
         * 我在这个公司开个一个月，做了一个根据用户的心情改变app的颜色的功能，做完了，我要提交一下
         * 我在这个公司开个一个月，做了一个根据用户的心情改变app的颜色的功能，做完了，我要提交一下
         * 我在这个公司开个一个月，做了一个根据用户的心情改变app的颜色的功能，做完了，我要提交一下
         * @param args
         */
        /**
        git上面直接添加的代码11111111111111111111111111111111
        解决idea项目中不显示.idea文件
        1.
        关于创建的Java或者Maven项目中,不显示“.idea”文件
        2.
        找到file–settings–Editor–File Types 删除其中的“*.idea”点击应用OK即可
        3.
        修改完成后再次回到项目目录:
        更多

        */
        //1.查询
        List<Department> all = departmentService.findAll();
        //2.封装结果返回
        return AjaxResult.createSuccess(all);
    }

    /**
     * 分页查询
     * @param departmentQuery
     * @return
     */
    @PostMapping("/findPage")
    @ApiOperation("分页查询所有部门的接口")
    public PageList<Department> findPage(@RequestBody DepartmentQuery departmentQuery){
        /**
         古巨基你动了我的代码，去年买了个包
11111111111111111111
        */
        /**
         * 古巨基你的脑残，去年买了个表
         */
        //分页查询
        return departmentService.findPage(departmentQuery);
    }

    /**
     * 新增或者修改
     */
    @PostMapping
    @ApiOperation("新增或者修改部门的接口")
    public AjaxResult saveOrUpdate(@RequestBody @Valid Department department){

        //土方法，绝对可以 很low
      /*  if (StringUtils.isBlank(department.getName())){
            return AjaxResult.createError("部门部门必填");
        }

        if (StringUtils.isBlank(department.getSn())){
            return AjaxResult.createError("部门编码必填");
        }

        if (department.getSn().length() <3 ||department.getSn().length() >6 ){
            return AjaxResult.createError("编码3-6位之间请输入");
        }
*/

        //保存并返回成功
        departmentService.saveOrUpdate(department);

        return AjaxResult.createSuccess();


    }


    /**
     * 根据id
     */
    @DeleteMapping("/{id}")
    @ApiOperation("删除部门的接口")
    public AjaxResult delete(@PathVariable("id") Long id){

        //调用删除方法
        departmentService.delete(id);

        return AjaxResult.createSuccess();

    }
    /**
     * {ids:ids}
     * this.$http.post("/dept/batchDelete",para).then(res =>{
     */
    @PostMapping("/batchDelete")
    @ApiOperation("批量删除部门的接口")
    public AjaxResult delete(@RequestBody DepartmentQuery query){

        //调用删除方法
        departmentService.batchDelete(query);
        return AjaxResult.createSuccess();

    }

}
